package cn.dw.mm.filter;


import java.io.IOException;
import javax.servlet.Filter;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class UsersFilter implements Filter {     
    
    public void destroy() {     
        // TODO Auto-generated method stub     
             
    }     
    
    public void doFilter(ServletRequest request, ServletResponse response,     
            FilterChain chain) throws IOException, ServletException {     
        // 设置请求的字符编码     
        request.setCharacterEncoding("UTF-8");     
        // 设置返回请求的字符编码     
        response.setCharacterEncoding("UTF-8");     
        // 转换ServletRequest为 HttpServletRequest     
        HttpServletRequest req = (HttpServletRequest) request;     
        // 转换ServletResponse为HttpServletRequest     
        HttpServletResponse res = (HttpServletResponse) response;     
        // 获取Session     
        HttpSession session = req.getSession();     
        // 获取Session中存储的对象     
        Object o = session.getAttribute("user");     
        // 获取当前请求的URI     
        String url = req.getRequestURI();     
        // 判断Session中的对象是否为空；判断请求的URI是否为不允许过滤的URI     
        if (o == null      
            && !url.endsWith("login.jsp")     // 对URL地址为此结尾的文件不过滤     
            && url.indexOf("/login") < 0    // 对URL地址中包含此字符串的文件不过滤     
        	) {
        	res.sendRedirect(req.getContextPath() + "/login.jsp");	
        } else {   
//        	if (o == null && url.indexOf("/newsPage.html") > 0) {
//        		chain.doFilter(request, response);
//			}
        	if (o != null
        		&& url.indexOf("/login") > 0) {
        		res.sendRedirect(req.getContextPath() + "/static/html/index.html");
			}
            chain.doFilter(request, response);     
          //下面三段代码都是控制缓存   。no-store完全不缓存，
            res.setHeader("Cache-Control","no-store");     
//            no-cache则先向服务器求证再决定是否读取 缓存（服务器发送 etag（http response header中）给浏览器，浏览器将文件和对应的etag保存下来。
//            下一次再访问这个文件，浏览器发送 If-None-Match：etag （http header）给服务器，服务器收到后检查这个etag和服务器自己保存的是否一致。
//            如果一致，就返回 304 not modified 给浏览器，即使用缓存副本。否则，浏览器下载新文件（http status 200）。）   
            res.setDateHeader("Expires",0);        //当Cache-Control：max-age=xx出现时，会覆盖此属性
            res.setHeader("Pragma","no-cache");      //兼容http 1.0，与Cache-Control: no-cache（兼容http 1.1）功能一致
            res.flushBuffer();     
        }     
             
    }     
    
    public void init(FilterConfig filterConfig) throws ServletException {     
             
    }

}    
